< Linux > 多线程(线程同步与互斥、可重入、线程安全、死锁) 您所在的位置:网站首页 可重入函数 线程安全 < Linux > 多线程(线程同步与互斥、可重入、线程安全、死锁)

< Linux > 多线程(线程同步与互斥、可重入、线程安全、死锁)

2024-06-21 02:54| 来源: 网络整理| 查看: 265

目录

1、Linux线程互斥

        进程线程间的互斥相关背景概念

        互斥量 mutex

        互斥量的接口

        互斥量实现原理探究

        互斥量接口的使用(多种方式初始化锁)

2、可重入 VS 线程安全

        概念

        常见的线程不安全的情况

        常见的线程安全的情况

        常见的不可重入的情况

        常见的可重入的情况

        可重入与线程安全联系

        可重入与线程安全区别

3、常见锁概念

        死锁

        死锁的四个必要条件

        避免死锁

4、Linux线程同步

        同步概念与竞态条件

        条件变量

        条件变量函数

        为什么pthread_mutex_wait需要互斥量

        条件变量使用规范

1、Linux线程互斥 进程线程间的互斥相关背景概念 临界资源: 多线程执行流共享的资源叫做临界资源。临界区: 每个线程内部,访问临界资源的代码,就叫做临界区。互斥: 任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用。原子性: 不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成。

下面详谈临界资源和临界区:

对于如下的代码,被多个线程访问的全局变量即临界资源,而访问此全局变量的代码即临界区:

下面详谈互斥和原子性:

注意:临界资源,可能会因为共同访问,造成数据不一致的问题,示例如下。

如下我写了一个票数计数器(全局变量tickets),创建4个线程来模拟多线程抢票的场景: #include #include #include #include #include #include using namespace std; // int 票数计数器 int tickets = 10000; // 临界资源,可能会因为共同访问,造成数据不一致的问题 void *getTickets(void *args) { const char *name = static_cast(args); while (true) { // 临界区 if (tickets > 0) { cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有